/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package proyecto;

import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Luis Romero
 */
public class Registros {

    int IDN;
    Pantalla p;
    int[] Registros;
    int[] Validos;
    final Object candado;

    public Registros() {
        Registros = new int[33];
        Validos = new int[33];
        candado = new Object();
    }

    public void setPantalla(Pantalla x, int id) {
        p = x;
        IDN = id;
    }

    public void parar() {
        synchronized (candado) {
            try {
                System.out.println("Lock registro");
                candado.wait();
            } catch (InterruptedException ex) {
                Logger.getLogger(ID.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    public void seguir() {
        synchronized (candado) {
            System.out.println("Liberar en registro");
            candado.notify();
        }
    }

    public synchronized int getRegistro(int reg) {
        if (reg == 0) {
            return 0;
        } else {
            if (!esValido(reg)) {
                System.out.println("Para en el getRegistro:" + reg);
                this.parar();
            }
            return Registros[reg];
        }
    }

    public synchronized void invalidarRegistro(int reg) {
        if(reg!=0){
            System.out.println("Invalidando el registro:" + reg);
            Validos[reg]++;
        }
    }

    public synchronized void validarRegistro(int reg) {
        if(!esValido(reg)){
           // System.out.println("El registro no es valido:" + reg);
            Validos[reg]--;
           // System.out.println("Ya valide el registro:" + reg);
             if (esValido(reg)) {
          //      System.out.println("Es valido siga:" + reg);
                this.seguir();
             }
        }
    }

    public boolean esValido(int reg) {
        boolean retorno;
        if (Validos[reg] == 0) {
            retorno = true;
        } else {
            retorno = false;
        }
        return retorno;
    }

    public synchronized void setRegistro(int reg, int valor) {
        if (!esValido(reg)) {
            System.out.println("Para en el setRegistro:"+reg);
            this.parar();
        }
        Registros[reg] = valor;
       // System.out.println("Escribiendo en el registro:"+reg);
        //Actualiza los datos en los registros de la interfaz
        p.actualizarDatos(Registros, IDN);
        //System.out.println("Listo y escrito el registro:" + reg);
    }
}
